<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Базовая установка</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Руководство по Smarty">
<link rel="up" href="installation.html" title="Chapter 2. Установка">
<link rel="prev" href="installation.html" title="Chapter 2. Установка">
<link rel="next" href="installing.smarty.extended.html" title="Расширенная установка">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Базовая установка</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="installation.html">Prev</a> </td>
<th width="60%" align="center">Chapter 2. Установка</th>
<td width="20%" align="right"> <a accesskey="n" href="installing.smarty.extended.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="Базовая установка">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="installing.smarty.basic"></a>Базовая установка</h2></div></div></div>
<p>
     Скопируйте файлы Smarty, которые находятся в субдиректории
     <code class="filename">/libs/</code>
     дистрибутива. Редактировать эти PHP-файлы НЕ СЛЕДУЕТ. Они должны
     использоваться всеми приложениями и изменяться только при обновлении
     Smarty до новой версии.
    </p>
<p>
     В следующих примерах архив с исходным кодом Smarty был распакован в
     </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>
        <code class="filename">/usr/local/lib/Smarty-v.e.r/</code>
        для машин под *nix
       </p></li>
<li class="listitem"><p>
        и
        <code class="filename">c:\webroot\libs\Smarty-v.e.r\</code>
        для машин под Windows.
       </p></li>
</ul></div>
<p>
    </p>
<div class="example">
<a name="id2644205"></a><p class="title"><b>Example 2.1. Необходимые файлы библиотеки Smarty</b></p>
<div class="example-contents"><pre class="screen">

Smarty-v.e.r/
    libs/
        Smarty.class.php
        Smarty_Compiler.class.php
        Config_File.class.php
        debug.tpl
        internals/*.php (все файлы)
        plugins/*.php (все файлы)

     </pre></div>
</div>
<br class="example-break"><p>
     Smarty использует <a class="ulink" href="http://php.net/define" target="_top">константу</a> PHP
     <a class="link" href="smarty.constants.html#constant.smarty.dir" title="SMARTY_DIR">
     <code class="constant">SMARTY_DIR</code></a>, которая указывает
     <span class="bold"><strong>полный путь</strong></span> к директории
     <code class="filename">libs/</code> из Smarty.
     Обычно, если ваше приложение может
     найти файл <code class="filename">Smarty.class.php</code>, то нет необходимости
     устанавливать
     <a class="link" href="smarty.constants.html#constant.smarty.dir" title="SMARTY_DIR"><code class="constant">SMARTY_DIR</code></a>
      - Smarty сам во всём разберётся.
      Однако, если
     <code class="filename">Smarty.class.php</code> не может
     быть найден в вашем include_path или вы не указывали абсолютный путь к
     нему в приложении, то вы должны определить
     <code class="constant">SMARTY_DIR</code> вручную.
     <code class="constant">SMARTY_DIR</code> <span class="bold"><strong>должна включать
     завершающий слэш</strong></span>.
    </p>
<div class="informalexample">
<p>
      Вот как следует создавать экземпляр объекта Smarty в ваших PHP-скриптах:
     </p>
<pre class="programlisting">

&lt;?php
// Обратите внимание: в слове Smarty буква 'S' должна быть заглавной
require_once('Smarty.class.php');
$smarty = new Smarty();
?&gt;

     </pre>
</div>
<p>
     Попробуйте выполнить вышеуказанный код. Если Вы получаете ошибку о том,
     что <code class="filename">Smarty.class.php</code> не найден, попробуйте следующие
     варианты действий:
    </p>
<div class="example">
<a name="id2644346"></a><p class="title"><b>Example 2.2. Ручная установка константы SMARTY_DIR</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
// стиль *nix (не забывайте о заглавной 'S')
define('SMARTY_DIR', '/usr/local/lib/Smarty-v.e.r/libs/');

// стиль windows
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');

// пример хака для работы одновременно с *nix и windows
// предполагается, что Smarty находится в директории 'includes/' относительно текущего скрипта
define('SMARTY_DIR', str_replace("\\", "/", getcwd()).'/includes/Smarty-v.e.r/libs/');

require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?&gt;

     </pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644361"></a><p class="title"><b>Example 2.3. Передача абсолютного пути к файлам библиотеки</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
// стиль *nix (не забывайте о заглавной 'S')
require_once('/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php');

// стиль windows
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');

$smarty = new Smarty();
?&gt;

     </pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644398"></a><p class="title"><b>Example 2.4. Добавление библиотеки в путь в файле <code class="filename">php.ini</code></b></p>
<div class="example-contents"><pre class="programlisting">

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; *nix: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"

; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"

     </pre></div>
</div>
<br class="example-break"><div class="example">
<a name="id2644427"></a><p class="title"><b>Example 2.5. 
      Дописывание include_path из PHP-скрипта используя
      <code class="literal"><a class="ulink" href="http://php.net/ini-set" target="_top">ini_set()</a></code>
     </b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php
// *nix
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');

// windows
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
?&gt;

    </pre></div>
</div>
<br class="example-break"><p>
    Теперь, когда все файлы находятся на своих местах, пришло время
    установки директорий Smarty в вашем приложении.
   </p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem"><p>   
      Smarty нужно четыре директории, которые по умолчанию называются
      <code class="filename">templates/</code>,
      <code class="filename">templates_c/</code>,
      <code class="filename">configs/</code> и
      <code class="filename">cache/</code>
     </p></li>
<li class="listitem"><p>
      Каждая из них определяется свойствами класса Smarty:
      <a class="link" href="api.variables.html#variable.template.dir" title="$template_dir">
      <code class="varname">$template_dir</code></a>,
      <a class="link" href="variable.compile.dir.html" title="$compile_dir">
      <code class="varname">$compile_dir</code></a>,
      <a class="link" href="variable.config.dir.html" title="$config_dir">
      <code class="varname">$config_dir</code></a> и
      <a class="link" href="variable.cache.dir.html" title="$cache_dir">
      <code class="varname">$cache_dir</code></a> соответственно.
      Настойчиво рекомендуется использовать разные наборы
      этих директорий для каждого приложения, использующего Smarty.
     </p></li>
</ul></div>
<p>
    В нашем примере мы будем устанавливать Smarty для некоторой гостевой
    книги. Приложение было выбрано только для того, чтобы использовать его
    имя в именах директорий. Вы можете использовать те же настройки с любым
    другим приложением, просто меняя <code class="literal">guestbook/</code>
    на имя вашего приложения.
   </p>
<div class="example">
<a name="id2644592"></a><p class="title"><b>Example 2.6. Вот как выглядит файловая структура</b></p>
<div class="example-contents"><pre class="screen">

/usr/local/lib/Smarty-v.e.r/libs/
        Smarty.class.php
        Smarty_Compiler.class.php
        Config_File.class.php
        debug.tpl
        internals/*.php
        plugins/*.php

/web/www.example.com/
        guestbook/
                templates/
                    index.tpl
                templates_c/
                configs/
                cache/
                htdocs/
                    index.php

    </pre></div>
</div>
<br class="example-break"><p>
    Убедитесь, что вы знаете расположение корневой директории документов
    вашего веб-сервера. В следующих примерах, корневой директорией документов
    является <code class="filename">/web/www.example.com/guestbook/htdocs/</code>.
    Доступ к директориям Smarty происходит только из библиотеки Smarty и
    никогда не происходит через веб-браузер. Поэтому, в целях безопасности
    рекоммендуется располагать эти директории <span class="emphasis"><em>за пределами</em></span>
    корневой директории документов сервера, хотя это и не обязательно.
   </p>
<p>
    Вам понадобиться как минимум один файл внутри корневой директории
    документов - это скрипт, вызываемый веб-браузером. Мы назовем наш скрипт
    <code class="filename">index.php</code> и положим его в поддиректорию внутри
    корневой директории документов <code class="filename">/htdocs/</code>.
   </p>
<p>
    Smarty понадобятся <span class="bold"><strong>права на запись</strong></span>
    (пользователей Windows это не касается) в директории
    <a class="link" href="variable.compile.dir.html" title="$compile_dir">
    <em class="parameter"><code>$compile_dir</code></em></a> и
    <a class="link" href="variable.cache.dir.html" title="$cache_dir">
    <em class="parameter"><code>$cache_dir</code></em></a>
    (<code class="filename">templates_c/</code> и
    <code class="filename">cache/</code>),
    так что убедитесь, что у веб-сервера есть эти права.
    
    </p>
<div class="note" title="Note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
      Обычно это пользователь <span class="quote">“<span class="quote">nobody</span>”</span> и группа
  	  <span class="quote">“<span class="quote">nobody</span>”</span>. Для пользователей OS X, пользователь по умолчанию
  	  - это <span class="quote">“<span class="quote">www</span>”</span> и группа - <span class="quote">“<span class="quote">www</span>”</span>.
  	  Если вы используете Apache, вы можете узнать используемые
  	  имя пользователя и группу из файла <code class="filename">httpd.conf</code>.
     </p>
</div>
<p>
   </p>
<div class="example">
<a name="id2644776"></a><p class="title"><b>Example 2.7. Установка прав доступа к файлам и директориям</b></p>
<div class="example-contents"><pre class="programlisting">

chown nobody:nobody /web/www.example.com/smarty/guestbook/templates_c/
chmod 770 /web/www.example.com/smarty/guestbook/templates_c/

chown nobody:nobody /web/www.example.com/smarty/guestbook/cache/
chmod 770 /web/www.example.com/smarty/guestbook/cache/

    </pre></div>
</div>
<br class="example-break"><div class="note" title="Примечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Примечание</h3>
<p>
     <code class="literal">chmod 770</code> даёт достаточно жесткую защиту -
     разрешает только пользователю
     <span class="quote">“<span class="quote">nobody</span>”</span> и группе <span class="quote">“<span class="quote">nobody</span>”</span> доступ
     на чтение и запись в эти директории.
     Если вы хотите открыть доступ на чтение для всех (обычно для собственного
     удобства при просмотре этих файлов), вы можете использовать значение
     <code class="literal">775</code>.
    </p>
</div>
<p>
    Нам необходимо создать файл <code class="filename">index.tpl</code>,
    которы будет загружаться Smarty.
    Он будет расположен в
    <a class="link" href="api.variables.html#variable.template.dir" title="$template_dir">
    <em class="parameter"><code>$template_dir</code></em></a>.
   </p>
<div class="example">
<a name="id2644865"></a><p class="title"><b>Example 2.8. /web/www.example.com/guestbook/templates/index.tpl</b></p>
<div class="example-contents"><pre class="screen">

{* Smarty *}

Привет, {$name}! Добро пожаловать в Smarty!

    </pre></div>
</div>
<br class="example-break"><div class="note" title="Техническое замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Техническое замечание</h3>
<p>
     <code class="literal">{* Smarty *}</code> - это
     <a class="link" href="language.basic.syntax.html#language.syntax.comments" title="Комментарии">комментарий</a> шаблона.
     Он не является обязательным, но его размещение в начале каждого шаблона
     является хорошим тоном. Это позволяет проще различать файлы независимо
     от их расширения. К примеру, текстовые редакторы могут узнавать этот
     файл и включать особенную подсветку синтаксиса.
    </p>
</div>
<p>
    Теперь давайте отредактируем <code class="filename">index.php</code>.
    Мы создадим экземпляр Smarty,
    <a class="link" href="api.assign.html" title="assign()">присвоим</a> значение переменной шаблона и
    <a class="link" href="api.display.html" title="display()">отобразим</a> файл
    <code class="filename">index.tpl</code>.
   </p>
<div class="example">
<a name="id2644942"></a><p class="title"><b>Example 2.9. /web/www.example.com/docs/guestbook/index.php</b></p>
<div class="example-contents"><pre class="programlisting">

&lt;?php

require_once(SMARTY_DIR . 'Smarty.class.php');

$smarty = new Smarty();

$smarty-&gt;template_dir = '/web/www.example.com/guestbook/templates/';
$smarty-&gt;compile_dir = '/web/www.example.com/guestbook/templates_c/';
$smarty-&gt;config_dir = '/web/www.example.com/guestbook/configs/';
$smarty-&gt;cache_dir = '/web/www.example.com/guestbook/cache/';

$smarty-&gt;assign('name', 'Катруська');

//** раскомментируйте следующую строку для отображения отладочной консоли
//$smarty-&gt;debugging = true;

$smarty-&gt;display('index.tpl');
?&gt;

    </pre></div>
</div>
<br class="example-break"><div class="note" title="Примечание" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Примечание</h3>
<p>
     В нашем примере мы устанавливаем абсолютные пути ко всем директориям
     Smarty. Если <code class="filename">/web/www.example.com/guestbook/</code>
     находится в include_path вашего PHP, то эти настройки не обязательны.
     Тем не менее, более эффективным и (из опыта) менее глюкоопасным является
     использование абсолютных путей. Это придаст уверенность в том, что Smarty
     получает файлы из тех директорий, из которых вы хотите.
    </p>
</div>
<p>
    Теперь перейдите к файлу <code class="filename">index.php</code> при помощи вашего
    веб-браузера. Вы должны увидеть надпись
    <span class="emphasis"><em>"Привет, Катруська! Добро пожаловать в Smarty!"</em></span>
   </p>
<p>
    Вы закончили базовую установку Smarty!
   </p>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="installation.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="installation.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="installing.smarty.extended.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Chapter 2. Установка </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Расширенная установка</td>
</tr>
</table>
</div>
</body>
</html>
